package sanjiaoxing;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

//class Solution {
//    public List<List<Integer>> generate(int numRows) {
//        List<List<Integer>> rows = new ArrayList<>();
//
//        for (int i = 0;i < numRows;i++) {
//            rows.add(new ArrayList<>());
//            List<Integer> row = rows.get(i);
//            for (int j = 0;j < i + 1;j++) {
//                if (i == 0 || i == j) {
//                    row.add(1);
//                }else {
//                    List<Integer> prevRow = rows.get(i - 1);
//                    row.add(prevRow.get(j - 1) + prevRow.get(j));
//                }
//            }
//        }
//        return rows;
//    }
//}

class Solution {
    public List<List<Integer>> generate(int numRows) {
        List<List<Integer>> rows = new ArrayList<>();

        for (int i = 0; i < numRows; i++) {
            rows.add(new ArrayList<>()); // 添加空行，后续填充
            List<Integer> row = rows.get(i);
            for (int j = 0; j < i + 1; j++) {
                if (i == 0 || i == j) { // 首尾元素为1（i==0等价于j==0，逻辑一致）
                    row.add(1);
                } else {
                    List<Integer> prevRow = rows.get(i - 1); // 语义化变量名，更易读
                    row.add(prevRow.get(j - 1) + prevRow.get(j));
                }
            }
        }
        return rows;
    }
}

public class Test {
    public static void main(String[] args) {
        // 1. 创建Solution实例
        Solution solution = new Solution();

        // 2. 接收用户输入（行数）
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入杨辉三角的行数（正整数）：");
        int numRows = scanner.nextInt();
        scanner.close(); // 关闭扫描器，避免资源泄漏

        // 3. 调用generate方法生成杨辉三角
        List<List<Integer>> yanghuiTriangle = solution.generate(numRows);

        // 4. 格式化输出结果（居中显示，更直观）
        System.out.println("\n杨辉三角（" + numRows + "行）：");
        printFormattedTriangle(yanghuiTriangle);
    }

    // 辅助方法：格式化输出杨辉三角（居中对齐）
    private static void printFormattedTriangle(List<List<Integer>> triangle) {
        int totalRows = triangle.size();
        if (totalRows == 0) return;

        // 最后一行的元素个数（最多），用于计算居中间距
        int maxElements = triangle.get(totalRows - 1).size();

        for (List<Integer> row : triangle) {
            int currentElements = row.size();
            // 计算每行前面的空格（居中对齐核心）
            int spaceCount = (maxElements - currentElements) / 2;

            // 打印空格
            for (int i = 0; i < spaceCount; i++) {
                System.out.print("  "); // 两个空格，使间距更均匀
            }

            // 打印当前行元素
            for (int num : row) {
                System.out.print(num + "  "); // 元素间用两个空格分隔
            }

            // 换行
            System.out.println();
        }
    }
}




